/** 规则1：两个操作数如果都是number,正常返回*/
console.log(1 + 2); // 3

/** 规则2： 如果其中有一个操作数为string, 则将另一个操作数隐式的转换为string,然后进行字符串拼接得出结果*/
console.log(typeof (1 + '')); // string
console.log('a' + 123); // a123

/** 规则3：如果操作数为对象或则数组这种复杂的数据结构类型, 那么就将两个操作数都转换为字符串, 进行拼接*/
// console.log({a: 1, b: 2} + 1); // [object Object]1

/** 规则4：如果操作数是boolean这种简单数据类型, 那么久将操作数转换为number相加得出结果*/
// console.log(true + false + true + true); // 3


/** 下面这些就很 “魔幻” 了*/
/** ↓虽然console为[object Object],但直接在浏览器中输入{} + []结果是0,而[] + {}结果依然为[object Object]*/
// console.log({} + []); //[object Object]
// console.log([] + {}); //[object Object]

/** [ ] + { }:
 * 因为[]会被强制转换为"", 然后+运算符 链接一个{ }, { }强制转换为字符串就是"[object Object]" (遵循规则3)*/

/** {} + []:
 * { } 当作一个空代码块,+[]是强制将[]转换为number,转换的过程是 +[] => +"" =>0 最终的结果就是0*/


